【Shiro】6、Shiro实现限制密码错误次数从而限制用户登录

您所在的位置:网站首页 macbook air密码错误1小时后重试 【Shiro】6、Shiro实现限制密码错误次数从而限制用户登录

【Shiro】6、Shiro实现限制密码错误次数从而限制用户登录

2024-07-16 11:09:09| 来源: 网络整理| 查看: 265

我们的系统非常容易遭受攻击,被人暴力破解等,我们需要对同一账户密码错误次数进行统计,达到上限后,需要在一段时间内限制该用户登录,从而有效地保护账户密码的安全

1、重试限制散列凭据匹配器 package com.asurplus.common.shiro; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.ExcessiveAttemptsException; import org.apache.shiro.authc.credential.HashedCredentialsMatcher; import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheManager; import java.util.concurrent.atomic.AtomicInteger; /** * 重试限制散列凭据匹配器 * 输错5次密码锁定半小时,shiro-ehcache.xml配置 */ public class RetryLimitHashedCredentialsMatcher extends HashedCredentialsMatcher { /** * 错误次数 */ private int incrementAndGet = 5; /** * 缓存对象 */ private Cache passwordRetryCache; public void setIncrementAndGet(int incrementAndGet) { this.incrementAndGet = incrementAndGet; } public RetryLimitHashedCredentialsMatcher(CacheManager cacheManager) { passwordRetryCache = cacheManager.getCache("passwordRetryCache"); } @Override public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) { String username = (String) token.getPrincipal(); AtomicInteger retryCount = passwordRetryCache.get(username); if (retryCount == null) { retryCount = new AtomicInteger(0); passwordRetryCache.put(username, retryCount); } if (retryCount.incrementAndGet() > incrementAndGet) { throw new ExcessiveAttemptsException(); } boolean matches = super.doCredentialsMatch(token, info); if (matches) { passwordRetryCache.remove(username); } return matches; } }

通过上一篇【Shiro】五、Shiro整合Ehcache进行热点数据缓存博客,我们得到了 EhCacheManager 对象,这里我们刚好就用到了它,我们需要在 shiro-ehcache.xml 配置文件中,加一个存储对象,如下:

当密码错误次数大于我们设定的上限后,会抛出 ExcessiveAttemptsException 异常,我们在登录方法中可以捕获该异常,从而返回给客户端提示消息

2、自定义密码匹配器 /** * 凭证匹配器 * 执行login(token)后由securityManager调用,用于计算密码加密后的密文 * * @return */ @Bean public RetryLimitHashedCredentialsMatcher hashedCredentialsMatcher() { RetryLimitHashedCredentialsMatcher retryLimitHashedCredentialsMatcher = new RetryLimitHashedCredentialsMatcher(ehCacheManager()); // 设置散列算法 retryLimitHashedCredentialsMatcher.setHashAlgorithmName("md5"); // 设置散列计算次数,相当于md5(md5("")) retryLimitHashedCredentialsMatcher.setHashIterations(6); // storedCredentialsHexEncoded默认是true,此时用的是密码加密用的是Hex编码;false时用Base64编码 retryLimitHashedCredentialsMatcher.setStoredCredentialsHexEncoded(true); // 错误限制次数,5次 retryLimitHashedCredentialsMatcher.setIncrementAndGet(5); return retryLimitHashedCredentialsMatcher; }

之前的博客【Shiro】三、Shiro实现自定义密码验证规则,我们已经知道如何自定义密码验证规则,这次我们需要改写它

我们使用到了 RetryLimitHashedCredentialsMatcher 对象,它继承了 HashedCredentialsMatcher 对象,只是在 doCredentialsMatch (文档标识符匹配)方法中我们实现了自己的业务逻辑

3、自定义认证授权规则 /** * 自定义认证授权规则 */ @Bean public LoginRelam loginRelam() { // 登录认证规则 LoginRelam loginRelam = new LoginRelam(); // 自定义加密规则 loginRelam.setCredentialsMatcher(hashedCredentialsMatcher()); return loginRelam; }

同样,我们需要在自定义授权认证的时候,传入我们的密码验证规则

如您在阅读中发现不足,欢迎留言!!!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭